// ABP 8.3.4 用户管理API

import { requestClient } from '../../request';
import type {
  CreateUserDto,
  GetRolesOutput,
  GetUsersInput,
  GetUsersOutput,
  UpdateUserDto,
  UpdateUserRolesDto,
  UserDto,
  UserRoleDto,
  RoleDto,
} from './types';

// API前缀
const apiPrefix = '/api/identity/users';

/**
 * 获取用户列表
 * @param params 分页和过滤参数
 */
export function getUsers(params: GetUsersInput) {
  return requestClient.get<GetUsersOutput>(`${apiPrefix}`, { params });
}

/**
 * 获取用户详情
 * @param id 用户ID
 */
export function getUser(id: any) {
  return requestClient.get<UserDto>(`${apiPrefix}/${id}`);
}

/**
 * 创建用户
 * @param data 用户数据
 */
export function createUser(data: Partial<CreateUserDto>) {
  return requestClient.post<UserDto>(`${apiPrefix}`, data);
}

/**
 * 更新用户
 * @param id 用户ID
 * @param data 用户数据
 */
export function updateUser(id: string, data: Partial<UpdateUserDto>) {
  return requestClient.put<UserDto>(`${apiPrefix}/${id}`, data);
}

/**
 * 删除用户
 * @param id 用户ID
 */
export function deleteUser(id: string) {
  return requestClient.delete(`${apiPrefix}/${id}`);
}

/**
 * 获取用户角色
 * @param id 用户ID
 */
export function getUserRoles(id: any) {
  return requestClient.get<UserRoleDto>(`${apiPrefix}/${id}/roles`);
}

/**
 * 更新用户角色
 * @param id 用户ID
 * @param data 角色数据
 */
export function updateUserRoles(id: string, data: UpdateUserRolesDto) {
  return requestClient.put(`${apiPrefix}/${id}/roles`, data);
}

/**
 * 获取所有角色
 */
export function getRoleAlls() {
  return requestClient.get<GetRolesOutput>('/api/identity/roles/all');
}

/**
 * 锁定用户
 * @param id 用户ID
 */
export function lockUser(id: string) {
  return requestClient.put(`${apiPrefix}/${id}/lock`);
}

/**
 * 解锁用户
 * @param id 用户ID
 */
export function unlockUser(id: string) {
  return requestClient.put(`${apiPrefix}/${id}/unlock`);
}

/**
 * 重置密码
 * @param id 用户ID
 * @param newPassword 新密码
 */
export function resetPassword(id: string, newPassword: string) {
  return requestClient.post(`${apiPrefix}/${id}/reset-password`, {
    newPassword,
  });
}
